package com.ruoyi.biz.service.impl;

import com.ruoyi.biz.domain.BizParcel;
import com.ruoyi.biz.domain.BizParcelPic;
import com.ruoyi.biz.domain.query.BizParcelQuery;
import com.ruoyi.biz.domain.vo.BizParcelVO;
import com.ruoyi.biz.mapper.BizParcelMapper;
import com.ruoyi.biz.mapper.BizParcelPicMapper;
import com.ruoyi.biz.service.IBizParcelService;
import com.ruoyi.common.constant.OSSConstants;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.OssUtils;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 邮包Service业务层处理
 *
 * @author ruoyi
 * @date 2022-01-10
 */
@Service
public class BizParcelServiceImpl implements IBizParcelService {
    @Autowired
    private BizParcelMapper bizParcelMapper;
    @Autowired
    private BizParcelPicMapper bizParcelPicMapper;
    @Autowired
    private OssUtils ossUtils;

    /**
     * 查询邮包
     *
     * @param id 邮包主键
     * @return 邮包
     */
    @Override
    public BizParcelVO selectBizParcelById(Long id) {
        BizParcelVO vo = new BizParcelVO();
        BizParcel bizParcel = bizParcelMapper.selectBizParcelById(id);
        if (bizParcel != null) {
            BeanUtils.copyProperties(bizParcel, vo);
            BizParcelPic condition = new BizParcelPic();
            condition.setParcelId(bizParcel.getId());
            List<BizParcelPic> pics = bizParcelPicMapper.selectBizParcelPicList(condition);
            vo.setPics(pics);
        }
        return vo;
    }

    /**
     * 查询邮包列表
     *
     * @param bizParcel 邮包
     * @return 邮包
     */
    @Override
    public List<BizParcel> selectBizParcelList(BizParcelQuery bizParcelQuery) {
        return bizParcelMapper.selectBizParcelList(bizParcelQuery);
    }

    /**
     * 新增邮包
     *
     * @param bizParcel 邮包
     * @return 结果
     */
    @Override
    public int insertBizParcel(BizParcel bizParcel) {
        bizParcel.setCreateTime(DateUtils.getNowDate());
        return bizParcelMapper.insertBizParcel(bizParcel);
    }

    /**
     * 新增邮包
     *
     * @param bizParcel 邮包
     * @return 结果
     */
    @Override
    @Transactional
    public boolean insertParcel(BizParcel bizParcel, List<MultipartFile> files) {
        bizParcel.setCreateTime(DateUtils.getNowDate());
        bizParcelMapper.insertBizParcel(bizParcel);
        try {
            for (MultipartFile file : files) {
                String ossKey = ossUtils.generateKey(file.getOriginalFilename());
                //上传文件到oss
                ossUtils.putObject(OSSConstants.PARCEL, ossKey, file.getInputStream());
                //保存图片
                BizParcelPic pic = new BizParcelPic();
                pic.setParcelId(bizParcel.getId());
                pic.setOssKey(ossKey);
                pic.setPicUrl(OSSConstants.PARCEL_URL_PREFIX + ossKey);
                pic.setCreateTime(DateUtils.getNowDate());
                bizParcelPicMapper.insertBizParcelPic(pic);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

    /**
     * 前端查询列表
     *
     * @param bizParcelQuery 邮包
     * @return
     */
    @Override
    public List<BizParcelVO> selectBizParcelVOList(BizParcelQuery bizParcelQuery) {
        List<BizParcel> bizParcels = bizParcelMapper.selectBizParcelList(bizParcelQuery);
        List<BizParcelVO> voList = Lists.newArrayList();
        for (BizParcel data : bizParcels) {
            BizParcelVO vo = new BizParcelVO();
            BeanUtils.copyProperties(data, vo);
            BizParcelPic condition = new BizParcelPic();
            condition.setParcelId(data.getId());
            List<BizParcelPic> pics = bizParcelPicMapper.selectBizParcelPicList(condition);
            vo.setPics(pics);
            voList.add(vo);
        }
        return voList;
    }


    /**
     * 修改邮包
     *
     * @param bizParcel 邮包
     * @return 结果
     */
    @Override
    public int updateBizParcel(BizParcel bizParcel) {
        bizParcel.setUpdateTime(DateUtils.getNowDate());
        return bizParcelMapper.updateBizParcel(bizParcel);
    }

    /**
     * 批量删除邮包
     *
     * @param ids 需要删除的邮包主键
     * @return 结果
     */
    @Override
    public int deleteBizParcelByIds(Long[] ids) {
        return bizParcelMapper.deleteBizParcelByIds(ids);
    }

    /**
     * 删除邮包信息
     *
     * @param id 邮包主键
     * @return 结果
     */
    @Override
    public int deleteBizParcelById(Long id) {
        return bizParcelMapper.deleteBizParcelById(id);
    }
}
